<?php
/**
 * Created by PhpStorm.
 * User: readLine
 * Date: 2017/11/10
 * Time: 9:14
 */
namespace app\index\controller;
use think\Controller;
use think\Db;

class File extends Controller
{
    public function index(){}
//获取文件列表
    public function getFiles(){
        $result['code'] = 1;
        $result['msg'] = '';


        $limit = input('limit');
        $page = input('page');
        $start = ($page-1) * $limit;
        $ret = Db::table('file')
            ->order('id desc')
            ->limit($start,$limit)
            ->select();

        $data1 = Db::table('file')->select();
        if($ret){

            $num = count($ret);
            for($i = 0;$i < $num;$i++){
//                if(preg_match('/\.docx$/',$ret[$i]['name'])){}else{
//                    $ret[$i]['url'] = '/index/File/downLoad?id='.$ret[$i]['Id'];
//                }
                $ret[$i]['url'] = '/index/File/downLoad?id='.$ret[$i]['Id'];
            }

            $result['msg'] = '查询成功';
            $result['data'] = $ret;
            $result['count'] = sizeof($data1);
//            $this->success('获取文件列表成功','',$ret);
//            return json($ret);
            return json($result);
        }
        else{
            $this->error('无数据');
        }

    }

    public function downLoad(){
        $id = input('id');

        $fileServer = db('file')
            ->where('Id','=',$id)
            ->field('name,url')
            ->find();

        $fileName = $fileServer['name'];
        $fileUrl = $fileServer['url'];
        $fileUrl = iconv("UTF-8","GB2312//IGNORE",$fileUrl);
        if (!file_exists('.'.$fileUrl)) { //检查文件是否存在
            print_r($fileUrl);
        }else{
            $file = fopen('.'.$fileUrl,'r');
            Header("Content-type: application/octet-stream");//的作用：通过这句代码客户端浏览器就能知道服务端返回的文件形式
            Header("Accept-Ranges: bytes");//的作用：告诉客户端浏览器返回的文件大小是按照字节进行计算的
            Header("Accept-Length:".filesize('.'.$fileUrl));//的作用：告诉浏览器返回的文件大小
            Header("Content-Disposition: attachment; filename=".$fileName);//的作用:告诉浏览器返回的文件的名称
            Header('Content-Transfer-Encoding: binary'); //设置传输方式
            //输出文件
            while(!feof($file)){
                echo fread($file,filesize('.'.$fileUrl));
            }
            //关闭文件
            fclose($file);
        }
    }


//获得图书信息TXT文件
    public function backUpMate(){

        $bookId = input('book_id');

        $book = db('books')
            ->where('book_id','=',$bookId)
            ->find();
        $author = db('books_author')
            ->alias('a')
            ->where('a.book_id','=',$bookId)
            ->join('author b','a.author_id = b.author_id')
            ->field('a.level,b.author_name,b.author_work_place,b.author_introduction,b.author_pic')
            ->order('a.level asc')
            ->select();
//      print_r($book);
//      print_r($author);

        $url='backup/'.$book['book_name'].'.txt';
        $name = $book['book_name'].'.txt';
        $str = '书名:'.$book['book_name']."\r\n".'出版社:'.$book['book_company']."\r\n".'计划出版时间:'.$book['book_out_datetime']."\r\n". '字数:'.$book['book_word_count']."\r\n".'书号状态:'.$book['status']."\r\n\r\n";

//        print_r($_SERVER['SERVER_NAME']);
        foreach ($author as $vo)
        {
            switch ($vo['level']){
                case '1':$str = $str."\r\n".'第一主编'."\r\n".'作者姓名:'.$vo['author_name']."\r\n".'工作单位:'.$vo['author_work_place']."\r\n"."作者简介:".$vo['author_introduction']."\r\n".'作者照片: ';
                    if(!empty($vo['author_pic'])){
                        $str = $str.$_SERVER['SERVER_NAME'].$vo['author_pic']."\r\n";
                    }else{
                        $str = $str."\r\n";
                    }
                    break;
                case '2':$str = $str."\r\n".'第二主编'."\r\n".'作者姓名:'.$vo['author_name']."\r\n".'工作单位:'.$vo['author_work_place']."\r\n"."作者简介:".$vo['author_introduction']."\r\n".'作者照片: ';
                    if(!empty($vo['author_pic'])){
                        $str = $str.$_SERVER['SERVER_NAME'].$vo['author_pic']."\r\n";
                    }else{
                        $str = $str."\r\n";
                    }
                    break;
                case '3':$str = $str."\r\n".'第三主编'."\r\n".'作者姓名:'.$vo['author_name']."\r\n".'工作单位:'.$vo['author_work_place']."\r\n"."作者简介:".$vo['author_introduction']."\r\n".'作者照片: ';
                    if(!empty($vo['author_pic'])){
                        $str = $str.$_SERVER['SERVER_NAME'].$vo['author_pic']."\r\n";
                    } else{
                        $str = $str."\r\n";
                    }
                    break;
                case '4':$str = $str."\r\n".'第一副主编'."\r\n".'作者姓名:'.$vo['author_name']."\r\n".'工作单位:'.$vo['author_work_place']."\r\n";
                    break;
                case '5':$str = $str."\r\n".'第二副主编'."\r\n".'作者姓名:'.$vo['author_name']."\r\n".'工作单位:'.$vo['author_work_place']."\r\n";
                    break;
                case '6':$str = $str."\r\n".'第三副主编'."\r\n".'作者姓名:'.$vo['author_name']."\r\n".'工作单位:'.$vo['author_work_place']."\r\n";
                    break;
                case '7':$str = $str."\r\n".'第四副主编'."\r\n".'作者姓名:'.$vo['author_name']."\r\n".'工作单位:'.$vo['author_work_place']."\r\n";
                    break;
                case '8':$str = $str."\r\n".'第五副主编'."\r\n".'作者姓名:'.$vo['author_name']."\r\n".'工作单位:'.$vo['author_work_place']."\r\n";
                    break;
                case '9':$str = $str."\r\n".'第六副主编'."\r\n".'作者姓名:'.$vo['author_name']."\r\n".'工作单位:'.$vo['author_work_place']."\r\n";
                    break;
                case '10':$str = $str."\r\n".'其他'."\r\n".'作者姓名:'.$vo['author_name']."\r\n".'工作单位:'.$vo['author_work_place']."\r\n";
                    break;
                case '11':$str = $str."\r\n".'编委'."\r\n".'作者姓名:'.$vo['author_name']."\r\n".'工作单位:'.$vo['author_work_place']."\r\n";
                    break;
            }
        }


        $url = iconv("UTF-8","GB2312//IGNORE",$url);
        file_put_contents($url,$str);
        $file = fopen($url,'r');
        Header("Content-type: application/octet-stream");//的作用：通过这句代码客户端浏览器就能知道服务端返回的文件形式
        Header("Accept-Ranges: bytes");//的作用：告诉客户端浏览器返回的文件大小是按照字节进行计算的
        Header("Accept-Length:".filesize($url));//的作用：告诉浏览器返回的文件大小
        Header("Content-Disposition: attachment; filename=".$name);//的作用:告诉浏览器返回的文件的名称
        while(!feof($file)){
            echo fread($file,filesize($url));
        }
        fclose($file);
        unlink($url);
    }
//获得著作信息TXT文件
    public function backUpMono(){
        $id = input('id');
        //查询专著信息
        $mono = db('monograph')
            ->where('Id','=',$id)
            ->find();
        //文件路径
        $url='backup/'.$mono['book_name'].'.txt';
        //文件内容
        $str = '书名:'.$mono['book_name']."\r\n"
            .'出版社:'.$mono['book_company']."\r\n"
            .'著作人:'.$mono['book_author']."\r\n"
            .'作者简介:'.$mono['author_about']."\r\n"
            . '字数:' .$mono['book_word_count']."\r\n"
            .'计划出版时间:'.$mono['book_date']."\r\n"
            .'书号状态:'.$mono['status']."\r\n"
            .'内容简介:'.$mono['book_about']."\r\n";
        //文件名称
        $name = $mono['book_name'].'.txt';


        //服务器为windows，需要将文件路径参数的编码由utf-8转为GB2312，
        $url = iconv("UTF-8","GB2312//IGNORE",$url);


        //把字符串写入文件
        //第一个参数为规定要写入数据的文件。如果文件不存在，则创建一个新文件
        //第二个参数为规定要写入文件的数据。可以是字符串、数组或数据流。
        file_put_contents($url,$str);


        //打开一个文件或 URL
        //第二个参数为打开的模式
        //"r" （只读方式打开）
        // r+" （读写方式打开）
        //"w" （写入方式打开，清除文件内容，如果文件不存在则尝试创建之）
        //"w+" （读写方式打开，清除文件内容，如果文件不存在则尝试创建之）
        //"a" （写入方式打开，将文件指针指向文件末尾进行写入，如果文件不存在则尝试创建之）
        //"a+" （读写方式打开，通过将文件指针指向文件末尾进行写入来保存文件内容）
        //"x" （创建一个新的文件并以写入方式打开，如果文件已存在则返回 FALSE 和一个错误）
        //"x+" （创建一个新的文件并以读写方式打开，如果文件已存在则返回 FALSE 和一个错误
        $file = fopen($url,'r');

        Header("Content-type: application/octet-stream");//的作用：通过这句代码客户端浏览器就能知道服务端返回的文件形式
        Header("Accept-Ranges: bytes");//的作用：告诉客户端浏览器返回的文件大小是按照字节进行计算的
        Header("Accept-Length:".filesize($url));//的作用：告诉浏览器返回的文件大小
        Header("Content-Disposition: attachment; filename=".$name);//的作用:告诉浏览器返回的文件的名称
        //输出文件
        while(!feof($file)){
            echo fread($file,filesize($url));
        }
        //关闭文件
        fclose($file);
        //删除文件
        unlink($url);
    }


}